package com.petdog.common.controller;

import com.petdog.common.dto.ApiResponse;
import com.petdog.common.util.FileUploadUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 媒体文件上传控制器
 * 处理图片和视频文件的上传功能
 */
@RestController
@RequestMapping("/api/media")
public class MediaController {

    @Autowired
    private FileUploadUtil fileUploadUtil;

    /**
     * 上传单张图片
     * @param file 图片文件
     * @return 上传后的图片URL
     */
    @PostMapping("/upload-image")
    public ApiResponse<Map<String, String>> uploadImage(@RequestParam("file") MultipartFile file) {
        try {
            String imageUrl = fileUploadUtil.uploadImage(file);
            Map<String, String> result = new HashMap<>();
            result.put("url", imageUrl);
            return ApiResponse.success(result);
        } catch (IllegalArgumentException e) {
            if (e.getMessage().contains("文件大小超过限制")) {
                return ApiResponse.error("文件过大");
            } else if (e.getMessage().contains("不支持的文件类型")) {
                return ApiResponse.error("不支持的文件格式");
            } else {
                return ApiResponse.error("媒体上传失败，已为您保留输入内容，请重试上传");
            }
        } catch (IOException e) {
            return ApiResponse.error("媒体上传失败，已为您保留输入内容，请重试上传");
        }
    }

    /**
     * 上传多张图片
     * @param files 图片文件数组
     * @return 上传后的图片URL列表
     */
    @PostMapping("/upload-images")
    public ApiResponse<Map<String, List<String>>> uploadImages(@RequestParam("files") MultipartFile[] files) {
        try {
            List<String> imageUrls = fileUploadUtil.uploadImages(files);
            Map<String, List<String>> result = new HashMap<>();
            result.put("urls", imageUrls);
            return ApiResponse.success(result);
        } catch (IllegalArgumentException e) {
            if (e.getMessage().contains("文件大小超过限制")) {
                return ApiResponse.error("文件过大");
            } else if (e.getMessage().contains("不支持的文件类型")) {
                return ApiResponse.error("不支持的文件格式");
            } else {
                return ApiResponse.error("媒体上传失败，已为您保留输入内容，请重试上传");
            }
        } catch (IOException e) {
            return ApiResponse.error("媒体上传失败，已为您保留输入内容，请重试上传");
        }
    }

    /**
     * 上传视频文件
     * @param file 视频文件
     * @return 上传后的视频URL
     */
    @PostMapping("/upload-video")
    public ApiResponse<Map<String, String>> uploadVideo(@RequestParam("file") MultipartFile file) {
        try {
            String videoUrl = fileUploadUtil.uploadVideo(file);
            Map<String, String> result = new HashMap<>();
            result.put("url", videoUrl);
            return ApiResponse.success(result);
        } catch (IllegalArgumentException e) {
            if (e.getMessage().contains("文件大小超过限制")) {
                return ApiResponse.error("文件过大");
            } else if (e.getMessage().contains("不支持的文件类型")) {
                return ApiResponse.error("不支持的文件格式");
            } else {
                return ApiResponse.error("媒体上传失败，已为您保留输入内容，请重试上传");
            }
        } catch (IOException e) {
            return ApiResponse.error("媒体上传失败，已为您保留输入内容，请重试上传");
        }
    }
}